/**
 * 
 */
package fr.ulille1.fil.odeva;

import junit.framework.TestCase;

/**
 * @author romain_giovanetti
 *	Tests avant codage, basés sur les specs
 */
public class PortesMonnaiesTestCase extends TestCase {
	
	   /**
     * Create the test case
     *
     * @param testName name of the test case
     */
    public PortesMonnaiesTestCase( String testName )
    {
        super( testName );
    }

    private PorteMonnaies portesMonnaie;
    private MoneyFactory mf;

    // On ouvre un porte monaies avec 0 euro dedans
    public void setUp() throws UnexistingCurrencyException
    {
    	mf=MoneyFactory.getDefaultFactory();
    	Money zeroEuro = mf.createMoney(0, "EUR");
    	portesMonnaie = new PorteMonnaies(zeroEuro);
    }

    /**
     * Add
     */
    public void testAdd() throws UnexistingCurrencyException
    {
        Money expected=mf.createMoney(26, "EUR");
        Money ajout=mf.createMoney(26, "EUR");
        portesMonnaie.Add(ajout);
        // Doit retourner un objet money dans le format passé en parametre, ici en euro, les monnaies étrangères seront converties
        Money result = portesMonnaie.getValue("EUR");
        assertEquals(expected,result);
    }
    
    /**
     * Remove
     */
    public void testRemove() throws UnexistingCurrencyException, NotEnoughMoneyException
    {
    	Money rosaEuro = mf.createMoney(26, "EUR");
    	portesMonnaie = new PorteMonnaies(rosaEuro);
        Money expected = mf.createMoney(0, "EUR");
        Money retrait = mf.createMoney(26, "EUR");
        portesMonnaie.Remove(retrait);
        // Doit retourner un objet money dans le format passé en parametre, ici en euro, les monnaies étrangères seront converties
        Money result = portesMonnaie.getValue("EUR");
        assertEquals(expected,result);
    }
    
    /**
     * Remove more than possible
     */
    public void testRemove() throws UnexistingCurrencyException, NotEnoughMoneyException
    {
    	try {
    	Money rosaEuro = mf.createMoney(50, "EUR");
    	portesMonnaie = new PorteMonnaies(rosaEuro);
        Money retrait = mf.createMoney(100, "EUR");
        portesMonnaie.Remove(retrait);
    	}
    	catch(NotEnoughMoneyException e )
    	{
    		assertTrue(True);
    	}
    	}
    }


}
